package games.patience.core;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import commomgame.Card;
import commomgame.Region;
import java.util.List;

/**
 * Classe que representa a região de discarte do Jogo de Paciência
 *
 * @author Fernanda & Igo
 */
public class RegionOfDiscard extends Region {

    /**
     * Configura o número de subregiões do discarte e invoca método para nomear cada uma destas subregiões
     * @param numberOfSubRegions Representa o número de subregiões da região de discarte
     */

    public RegionOfDiscard(int numberOfSubRegions) {
        super(numberOfSubRegions);
        this.setNameOfSubRegions();

    }

    /**
     * Define o nome da única subregião de discarte
     */

    private void setNameOfSubRegions() {
        this.getRegion().get(0).setName("DISCARD");
    }


    /**
     * Método que distribui parte do baralho na região de discarte
     *
     * @param numberOfCards Representa o número de cartas da única subregião do discarte
     * @param partOfDeck Representa parte do baralho que compôe a região de discarte
     */
    public void sendCardsToRegion(int numberOfCards, List<Card> partOfDeck) {

        for (int i = 0; i < numberOfCards; i++) {
            getRegion().get(0).addCardInSubRegion(partOfDeck.get(i));
        }

    }


    /**
     * Método que define a quantidade de cartas que o usuário pode virar da região de discarte
     * @param numberOfVisibleCards Representa a quantidade máxima de cartas que o usuário pode virar da região de discarte
     */

    public void setVisibleCards(int numberOfVisibleCards){

        for(int i = 0; i< numberOfVisibleCards; i++){
            getRegion().get(0).getSetOfCard().get(i).setIsShowed(true);
        }

    }


    /**
     * Método que calcula a quantidade de cartas visíveis na região de discarte
     *
     * @return Quantidade de cartas visíveis na região de discarte
     */


    public int howManyVisibleCards(){

        int number = 0;

            for(int i = 0; i< getRegion().get(0).getSize();i++ ){

                if(getRegion().get(0).getSetOfCard().get(i).getIsShowed())
                    number++;
            }

        return number;


    }


    /**
     *
     * Método que permite que cartas sejam definidas como visíveis e outras como invisíveis, a depender
     * da retirada destas cartas da região de discarte pelo usuário
     * 
     * @param numberOfPassedCards Representa a quantidade de cartas que o usuário pode virar da região de discarte
     * @param numberOfTurning Representa a quantidade máxima de cartas que o usuário pode virar da região de discarte
     */
    public void changeCardsOnDiscard(int numberOfPassedCards, int numberOfTurning) {

        if (!this.isAnEmptyRegion()) {
            for (int i = 0; i < numberOfPassedCards; i++) {
                getRegion().get(0).getSetOfCard().add(getRegion().get(0).getSetOfCard().size() - 1, getRegion().get(0).getSetOfCard().remove(0));
            }

            for(int i = 0; i < numberOfTurning; i++){
                getRegion().get(0).getSetOfCard().get(i).setIsShowed(true);
            }

            for(int i = 0; i < numberOfPassedCards; i++){
                getRegion().get(0).getSetOfCard().get(getRegion().get(0).getSetOfCard().size() - i -1).setIsShowed(false);
            }

        }
    }
}
